package com.bakar.service;

import java.util.Collections;
import java.util.List;

import com.bakar.dao.UserDAO;
import com.bakar.dao.UserJPADAO;
import com.bakar.util.UserVOComparator;
import com.bakar.valueobjects.EmailVO;
import com.bakar.valueobjects.FriendVO;
import com.bakar.valueobjects.UserVO;

public class UserService {

	public static void saveUser(UserVO userVO) {
		UserDAO userDAO = new UserJPADAO();
		userDAO.createUser(userVO);
	}
	
	public static void saveEmail(EmailVO emailVO) {
		UserDAO userDAO = new UserJPADAO();
		userDAO.createEmail(emailVO);
	}
	
	public static void updateUser(UserVO userVO) {
		UserDAO userDAO = new UserJPADAO();
		userDAO.updateUser(userVO);
	}
	
	public static UserVO getUser(UserVO userVO) {
		UserDAO userDAO = new UserJPADAO();
		return userDAO.getUser(userVO);
	}
	
	public static void addFriendd(FriendVO friendVO) {
		UserDAO userDAO = new UserJPADAO();
		boolean flag = false;
		List<UserVO> users = userDAO.getOnlineFriends(new UserVO(friendVO.getOwnerid()));
		if (users != null ){
			for (UserVO user : users){
				if (user != null && user.getLoginId().equals(friendVO.getFriendid())){
					flag = true;
					break;
				}
			}
		} 
		if (!flag){
			userDAO.addFriend(friendVO);
		}
		
	}
	
	public static void updateStatus(UserVO userVO) {
		UserDAO userDAO = new UserJPADAO();
		userDAO.updateStatus(userVO);
		
	}
	
	public static void updateDisplayName(UserVO userVO) {
		UserDAO userDAO = new UserJPADAO();
		userDAO.updateDisplayName(userVO);
	}
	
	public static String getOnlineUsers(UserVO userVO) {
		UserDAO userDAO = new UserJPADAO();
		List<UserVO> users = userDAO.getOnlineFriends(userVO);
		Collections.sort(users, new UserVOComparator());
		return createOnlineUsersXML(users);
	}
	
	private static String createOnlineUsersXML(List<UserVO> onlineUsers) {
		StringBuilder sb = new StringBuilder();
		sb.append("<users>");
		//for (int i =0;i<50;i++){
			
		
		for (UserVO userVO : onlineUsers) {
			if(userVO !=null){
				sb.append("<user>");
				sb.append("<loginid>");
				sb.append(userVO.getLoginId());
				sb.append("</loginid>");
				sb.append("<status>");
				sb.append(userVO.getStatus());
				sb.append("</status>");
				sb.append("<displayName>");
				sb.append(userVO.getDisplayName());
				sb.append("</displayName>");
				sb.append("<imagepath>");
				sb.append(userVO.getImagePath());
				sb.append("</imagepath>");
				sb.append("<frndstatus>");
				sb.append(userVO.getFrndStatus());
				sb.append("</frndstatus>");
				sb.append("</user>");
			}
		//}
		}
		sb.append("</users>");
		return sb.toString();
	}
	
	public static void updateFriend(FriendVO friendVO) {
		UserDAO userDAO = new UserJPADAO();
		FriendVO friendFrmDB = userDAO.getFriend(friendVO);
		friendFrmDB.setStatus(friendVO.getStatus());
		userDAO.updateFriend(friendFrmDB);
	}
	

}
